#ifndef __QUEUE_H__
#define __QUEUE_H__

#include <stdint.h>
#include <stdbool.h>
#include <stddef.h>

typedef struct {
    uint8_t *buffer;    // 队列缓冲区指针
    uint16_t item_size; // 每个元素大小（字节）
    uint16_t capacity;  // 队列容量（最大元素个数）
    uint16_t head;      // 出队索引
    uint16_t tail;      // 入队索引
    uint16_t count;     // 当前元素个数
} Queue_HandleTypeDef;

bool queue_init(Queue_HandleTypeDef *q, uint8_t *buffer, uint16_t capacity, uint16_t item_size);
bool queue_push(Queue_HandleTypeDef *q, const void *item);
bool queue_pop(Queue_HandleTypeDef *q, void *item);
bool queue_is_empty(Queue_HandleTypeDef *q);
bool queue_is_full(Queue_HandleTypeDef *q);
uint16_t queue_count(Queue_HandleTypeDef *q);

#endif
